package com.ecommerce.dal.service;

import java.util.List;

import com.ecommerce.dal.entity.Customer;
import com.ecommerce.dal.entity.CustomerItem;

public interface ICustomerManagerService {
	/**
	 * @param Long customerID
	 * @return Customer Object
	 */
	public Customer retrieveCustomer(long customerId);
	/**
	 * @param String customerUsername
	 * @return Customer customer Object
	 */
	public Customer retrieveCustomer(String customerUsername);
	/**
	 * 
	 * @return list of verified customers
	 */
	public List<Customer> retrieveVerifiedCustomers();
	/**
	 * 
	 * @return list of non verified customers
	 */
	public List<Customer> retrieveNonVerifiedCustomers();
	/**
	 * 
	 * @param customerId
	 * @return check to see if a certain customer is verified or not
	 */
	public boolean isVerifiedCustomer(long customerId);

	/**
	 * @param Customer
	 *            customer
	 */
	public void saveCustomer(Customer customer);

	/**
	 * @param Customer
	 *            customer
	 * @return List of all selected items of the customer
	 */
	public List<CustomerItem> retrieveCutomerItems(long customerId);
	/**
	 * @param Item item
	 */
	public void saveCustomerItem(CustomerItem customerItem);
//	
//	/**
//	 * @param Map itemList
//	 */
//	public void setAllCustomerItems(List<CustomerItem> customerItems);

	/**
	 * @param Long
	 *            verificationCode
	 * @return Item Object assigned to the customer
	 */
	public CustomerItem retrieveItemByVerification(long customerId, long verificationCode);
	/**
	 * @param String customerUsername
	 * @param Long verificationCode
	 * @return Item from ItemHistory
	 */
	public CustomerItem retrieveItemByVerification(String customerUsername, long verificationCode);
	/**
	 * @param Long verification
	 * @return Item item Object of that verification code
	 */
	public CustomerItem retrieveItemByVerification(long verification);
	/**
	 * @param Long verification
	 * @return Customer customer Object of that verification code
	 */
	public Customer retrieveCustomerByVerification(long verification);
	
	
	void updateCustomer(Customer customer);
	void deleteCustomer(Customer customer);
	Customer findByCustomerId(long customerId);
	
	//to be removed
	boolean checkIfClient(long customerId);
	//to be removed
	boolean checkIfExists(long customerId);
	
}
